let fs = require('fs');
//读取歌词文件
fs.readFile('song.txt', function(err, data) {
    if (err) {
        return console.log('读取歌词文件失败了');
    }
    data = data.toString();

    let lines = data.split('\n');

    // 遍历所有行，通过正则匹配里面的时间，解析出毫秒
    // 需要里面的时间和里面的内容
    let reg = /\[(\d{2})\:(\d{2})\.(\d{2})\]\s*(.+)/;

    for (let i = 0; i < lines.length; i++) {
        (function(index) {
            let line = lines[index];
            let matches = reg.exec(line);
            if (matches) {
                // 获取分
                let m = parseFloat(matches[1]);
                // 获取秒
                let s = parseFloat(matches[2]);
                // 获取毫秒
                let ms = parseFloat(matches[3]);
                // 获取定时器中要输出的内容
                let content = matches[4];
                // 将分+秒+毫秒转换为毫秒
                let time = m * 60 * 1000 + s * 1000 + ms;

                    // 使用定时器，让每行内容在指定的时间输出
                    setTimeout(function() {
                        // 定义一个颜色代码数组
                        let colors = ['\x1b[31m', '\x1b[32m', '\x1b[33m', '\x1b[34m', '\x1b[35m', '\x1b[36m', '\x1b[37m'];
    
                        // 生成一个0到颜色代码数组长度之间的随机数
                        let randomColorIndex = Math.floor(Math.random() * colors.length);
    
                        // 选择一个随机颜色代码
                        let randomColor = colors[randomColorIndex];
    
                        // 输出文本加随机颜色
                        console.log(randomColor + '%s\x1b[0m', content);
                    }, time);
            }
        })(i);
    }
});
